/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package operaciones;
import controller.PersonanaturalJpaController;
import controller.exceptions.PreexistingEntityException;
import correo.Correo;
import dto.Personanatural;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.component.EditableValueHolder;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;



/**
 *
 * @author chokurey
 */
@ManagedBean(name="OperacionesPersonaNatural")
public class OperacionesPersonaNatural {
    Object valor;
    UIComponent componente;
    private Personanatural pernat;
    EntityManager em;
    PersonanaturalJpaController jpaparnat;
    EntityManagerFactory emf;
    Map sessionm;
    Mensajes msg;
    private boolean camposobligatorios=false;
    Correo correo;
    Query query;
    private List<Personanatural> listadopernat;
   
   
    private List<String> selectedMovies;  
    private Map<String,String> movies;  

    
    
    public OperacionesPersonaNatural(){
        movies = new HashMap<String, String>();  
        movies.put("Eventos", "Eventos");  
        movies.put("Promociones", "Promociones");  
        movies.put("Clasificados", "Clasificados"); 
     
    }

  

    public List<Personanatural> getListadopernat() {
        return listadopernat;
    }

    public void setListadopernat(List<Personanatural> listadopernat) {
        this.listadopernat = listadopernat;
    }
    
    
    public List<String> getSelectedMovies() {  
        return selectedMovies;  
    }  
    public void setSelectedMovies(List<String> selectedMovies) {  
        this.selectedMovies = selectedMovies;  
    }  
  
    public Map<String, String> getMovies() {  
        return movies;  
    }  
    
      
    public boolean isCamposobligatorios() {
        return camposobligatorios;
    }

    public void setCamposobligatorios(boolean camposobligatorios) {
        this.camposobligatorios = camposobligatorios;
    }
    
    
    public Personanatural getPernat() {
        return pernat;
    }

    public void setPernat(Personanatural pernat) {
        this.pernat = pernat;
    }
    
    
    
    public void registrarUsuario(ActionEvent e) {
      
      correo= new Correo();
      msg= new Mensajes();     
      pernat=new Personanatural();
      jpaparnat=new PersonanaturalJpaController();
      
      //nombre de usuario es la CC
      componente = e.getComponent().findComponent("regccpersonanatural");
      valor=((EditableValueHolder)componente).getValue();
      
      //buscando c.c. antes de guardar para asi msotrar mensaje de error a la hora de introduccir una cedula repetida
      //si el usuario no exite retorna false entonces se gegistra en la base dedatos
     if(buscarCCrepetida(e,String.valueOf(valor)) == false )
     {  
      pernat.setCc(String.valueOf(valor));
    
      componente = e.getComponent().findComponent("regnombrepersonanatural");
      valor=((EditableValueHolder)componente).getValue();
      pernat.setNombres(String.valueOf(valor));
      
      
      componente = e.getComponent().findComponent("regapellidospersonanatural");
      valor=((EditableValueHolder)componente).getValue();
      pernat.setApellidos(String.valueOf(valor));    

      
      
      componente = e.getComponent().findComponent("regpasswordpersonanatural");
      valor=((EditableValueHolder)componente).getValue();
      pernat.setPassword(String.valueOf(valor));
      
    
      componente = e.getComponent().findComponent("regdeptopersonanatural");
      valor=((EditableValueHolder)componente).getValue();
      pernat.setDepto(String.valueOf(valor));
      
      
      componente = e.getComponent().findComponent("regdireccionpersonanatural");
      valor=((EditableValueHolder)componente).getValue();
      pernat.setDireccion(String.valueOf(valor));
      
      componente = e.getComponent().findComponent("regtelefonopersonanatural");
      valor=((EditableValueHolder)componente).getValue();
      pernat.setTelefono(String.valueOf(valor));
      
      componente = e.getComponent().findComponent("regcelularpersonanatural");
      valor=((EditableValueHolder)componente).getValue();
      pernat.setCelular(String.valueOf(valor));
      
      
      componente = e.getComponent().findComponent("regemailpersonanatural");
      valor=((EditableValueHolder)componente).getValue();
      pernat.setEmail(String.valueOf(valor));
      
      pernat.setEstadousuario("Inhabilitado");
      
      
      //capturar informacion seleccionada para recibir noticias, clasificados y eventos.
      
      pernat.setFecharegistro(new Date());
      
       if(selectedMovies.contains("Eventos"))
           pernat.setRecibirinfoeventos("si");
       else
           pernat.setRecibirinfoeventos("no");
       
       if(selectedMovies.contains("Promociones"))
           pernat.setRecibirinfopromociones("si");
       else
           pernat.setRecibirinfopromociones("no");
       
       if(selectedMovies.contains("Clasificados"))
           pernat.setRecibirinfoclasificados("si");
       else
           pernat.setRecibirinfoclasificados("no");
       
       
      try {
           
               jpaparnat.create(pernat);
               msg.info("Correcto.. la cuenta ha sido creada satisfactoriamente por favor revise su correo..."); 
               correo.enviarEmailBienvenidaPersonasNaturales(e);
               
           
        } catch (PreexistingEntityException ex) {
            Logger.getLogger(OperacionesPersonaNatural.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(OperacionesPersonaNatural.class.getName()).log(Level.SEVERE, null, ex);
        }
     
      
       sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
       sessionm.put("pernat", pernat);
     } 
       //si no existe el usuario mensaje de error
       else
         msg.warning("Error la cedula introducida ya existe intente de nuevo..");
    
   
 }
    
   
    
     public Personanatural obtenerSessionPersonanatural(){
        
          sessionm = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
          pernat = (Personanatural) sessionm.get("pernat");
               
      return pernat;
    }
     
     //busca valida si una cc esta repetida o no
      public boolean buscarCCrepetida(ActionEvent e,String ccbus)
    {
          boolean repetida=false;
          
          em=EMF.get().createEntityManager();
          
          
          query = em.createQuery("SELECT pernat FROM Personanatural pernat WHERE pernat.cc=?1")
                  .setParameter(1,ccbus);
          listadopernat= query.getResultList();   
          
          if(listadopernat.size()>0)
               repetida=true;
          else
               repetida=false;
          
          em.close();
     
          return repetida;
    }
    
}
